{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "initial_id",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    ""
   ]
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "需求：\n",
    "\n",
    "北京明天的天气怎么样？上海呢？ （通过两次对话实现）\n",
    "\n",
    "以ReAct模式为例进行实现："
   ],
   "id": "f7a69c26aca2ab9c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-01T03:20:03.002352Z",
     "start_time": "2025-10-01T03:19:54.361235Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "from langchain.memory import ConversationBufferMemory\n",
    "from langchain_openai import ChatOpenAI\n",
    "from langchain.agents import initialize_agent, AgentType\n",
    "from langchain.tools import Tool\n",
    "import os\n",
    "import dotenv\n",
    "from langchain_openai import ChatOpenAI\n",
    "from langchain_community.tools.tavily_search import TavilySearchResults\n",
    "dotenv.load_dotenv()\n",
    "\n",
    "# 读取配置文件的信息\n",
    "# os.environ['TAVILY_API_KEY'] = os.getenv(\"TAVILY_API_KEY\")\n",
    "os.environ['TAVILY_API_KEY'] = \"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\"\n",
    "\n",
    "# 获取Tavily搜索工具的实例\n",
    "search = TavilySearchResults(max_results=3)\n",
    "\n",
    "# 获取一个搜索的工具\n",
    "search_tool = Tool(\n",
    "    func=search.run,\n",
    "    name=\"Search\",\n",
    "    description=\"用于检索互联网上的信息\",\n",
    ")\n",
    "\n",
    "\n",
    "# 获取大语言模型\n",
    "os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY1\")\n",
    "os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
    "llm = ChatOpenAI(\n",
    "    model=\"gpt-4o-mini\",\n",
    "    temperature=0,\n",
    ")\n",
    "\n",
    "# 获取一个记忆的实例：ConversationBufferMemory\n",
    "memory = ConversationBufferMemory(\n",
    "    return_messages=True,  #是否返回 Message 对象列表（如 HumanMessage, AIMessage, SystemMessage）\n",
    "    memory_key=\"chat_history\"  #此时必须设置memory_key,且值为chat_history。因为提示词模板中使用的是chat_history。二者必须一致！\n",
    ")\n",
    "\n",
    "# 获取Agent的实例\n",
    "agent = AgentType.CONVERSATIONAL_REACT_DESCRIPTION\n",
    "\n",
    "# 获取AgentExecutor的实例\n",
    "agent_executor = initialize_agent(\n",
    "    tools = [search_tool],\n",
    "    llm = llm,\n",
    "    agent = agent,\n",
    "    verbose = True, # 显示详细的日志信息\n",
    "    memory = memory,\n",
    ")\n",
    "\n",
    "\n",
    "# 通过AgentExecutor 调用invoke(),并得到响应\n",
    "result = agent_executor.invoke(\"查询北京今天的天气情况\")\n",
    "\n",
    "\n",
    "# 处理响应数据\n",
    "print(result)"
   ],
   "id": "8fbcb200b99c1942",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/miniconda3/envs/pyth310/lib/python3.10/site-packages/requests/__init__.py:86: RequestsDependencyWarning: Unable to find acceptable character detection dependency (chardet or charset_normalizer).\n",
      "  warnings.warn(\n",
      "/var/folders/9p/r71fhhs11052m2r7x4gfc5b80000gn/T/ipykernel_82516/4057722408.py:16: LangChainDeprecationWarning: The class `TavilySearchResults` was deprecated in LangChain 0.3.25 and will be removed in 1.0. An updated version of the class exists in the :class:`~langchain-tavily package and should be used instead. To use it run `pip install -U :class:`~langchain-tavily` and import as `from :class:`~langchain_tavily import TavilySearch``.\n",
      "  search = TavilySearchResults(max_results=3)\n",
      "/var/folders/9p/r71fhhs11052m2r7x4gfc5b80000gn/T/ipykernel_82516/4057722408.py:35: LangChainDeprecationWarning: Please see the migration guide at: https://python.langchain.com/docs/versions/migrating_memory/\n",
      "  memory = ConversationBufferMemory(\n",
      "/var/folders/9p/r71fhhs11052m2r7x4gfc5b80000gn/T/ipykernel_82516/4057722408.py:44: LangChainDeprecationWarning: LangChain agents will continue to be supported, but it is recommended for new use cases to be built with LangGraph. LangGraph offers a more flexible and full-featured framework for building agents, including support for tool-calling, persistence of state, and human-in-the-loop workflows. For details, refer to the `LangGraph documentation <https://langchain-ai.github.io/langgraph/>`_ as well as guides for `Migrating from AgentExecutor <https://python.langchain.com/docs/how_to/migrate_agent/>`_ and LangGraph's `Pre-built ReAct agent <https://langchain-ai.github.io/langgraph/how-tos/create-react-agent/>`_.\n",
      "  agent_executor = initialize_agent(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n",
      "\u001B[32;1m\u001B[1;3m```\n",
      "Thought: Do I need to use a tool? Yes\n",
      "Action: Search\n",
      "Action Input: 北京今天的天气情况\n",
      "```\u001B[0m\n",
      "Observation: \u001B[36;1m\u001B[1;3m[{'title': '国庆节北京晴转多云阵风7级左右-资讯 - 中国天气网', 'url': 'http://news.weather.com.cn/2024/10/3903749.shtml', 'content': '大\\n 中\\n 小\\n\\n分享到\\n\\n原创未经授权不得转载\\n\\n中国天气网讯 北京今天（10月1日）天气晴转多云，阵风可达7级左右，气温下降，最高气温18℃，最低气温7℃。明后天，北京以晴朗天气为主，气温略有回升，但早晚天气仍然较凉，最低气温不足10℃，公众早出晚归请适时添衣。\\n\\n昨天，北京天空云量较多，南郊观象台最高气温21.5℃，加上北风阵阵，体感有些凉意。\\n\\n北京今晨天气晴朗。（图/中国天气网 宋华成）\\n\\n今天是国庆节，北京天气晴转多云，阵风较大。北京市气象台今晨6时发布天气预报，预计，今天白天晴转多云，山区有阵雨，北风三四级，阵风七级左右，最高气温18℃；夜间多云转晴，北风一二级，最低气温7℃。\\n\\n明后天，北京以晴朗天气为主，气温略有回升，最高气温20℃至21℃，最低气温8℃。\\n\\n气象部门提醒，今天白天北京北风明显，大风蓝色预警信号生效中，公众外出请注意防风；未来三天最低气温均在10℃以下，早晚凉意较浓，大家早出晚归请适时添衣，谨防感冒。\\n\\n编辑：宋华成\\n\\n分享到\\n\\n查天气 关注 “中国天气网” 微信公众号、“中国天气”微博、“中国天气”抖音\\n\\n最新推荐\\n\\n查看更多\\n\\n高清图集', 'score': 0.80698997}, {'title': '中国气象局-天气预报-城市预报- 北京', 'url': 'https://weather.cma.cn/web/weather/', 'content': '| 气压 | 1012.5hPa | 1011.9hPa | 1010.1hPa | 1008.7hPa | 1009.2hPa | 1009.7hPa | 1009.4hPa | 1008.9hPa |\\n| 湿度 | 93.2% | 73.3% | 79.1% | 78.5% | 84.3% | 87% | 90.4% | 92% |\\n| 云量 | 0% | 26.6% | 10.1% | 45.4% | 78.5% | 62.5% | 90% | 0% | [...] | 气压 | 1009.6hPa | 1009.6hPa | 1007.8hPa | 1006.5hPa | 1007.3hPa | 1008.5hPa | 1008.2hPa | 1008.4hPa |\\n| 湿度 | 90.3% | 71.9% | 78.9% | 80.2% | 85.8% | 95.4% | 94.8% | 93.9% |\\n| 云量 | 0.5% | 70% | 70% | 70% | 70% | 2.8% | 3.6% | 70% | [...] |  |  |  |  |  |  |  |  |  |\\n ---  ---  ---  --- \\n| 时间 | 11:00 | 14:00 | 17:00 | 20:00 | 23:00 | 02:00 | 05:00 | 08:00 |\\n| 天气 |  |  |  |  |  |  |  |  |\\n| 气温 | 24.2℃ | 28.3℃ | 28.8℃ | 26.1℃ | 23.8℃ | 23.4℃ | 22.2℃ | 25.3℃ |\\n| 降水 | 2.3mm | 2.3mm | 2.3mm | 2.3mm | 0.9mm | 无降水 | 0.7mm | 无降水 |\\n| 风速 | 3.1m/s | 3.3m/s | 3.3m/s | 2.6m/s | 2.8m/s | 3m/s | 3.3m/s | 3.3m/s |\\n| 风向 | 东北风 | 西南风 | 东南风 | 西南风 | 西南风 | 东南风 | 东北风 | 东南风 |', 'score': 0.78552294}, {'title': '海淀 - 中国气象局-天气预报-城市预报', 'url': 'https://weather.cma.cn/web/weather/54399.html', 'content': '| 湿度 | 46.5% | 53.4% | 66.6% | 81% | 94.1% | 91.2% | 90.5% | 36.1% |\\n| 云量 | 59.6% | 50% | 10.1% | 10.1% | 25.4% | 10.1% | 10.1% | 4.6% | [...] | 湿度 | 83.9% | 55.6% | 65.3% | 65.4% | 71.8% | 89.1% | 91.1% | 90.8% |\\n| 云量 | 10.1% | 10.1% | 10.1% | 10.1% | 10.1% | 10.1% | 10.1% | 10.1% | [...] | 湿度 | 80.8% | 43.3% | 52.4% | 60.5% | 71.2% | 77.5% | 83.5% | 87.8% |\\n| 云量 | 3.6% | 3.7% | 3.9% | 3.7% | 3.9% | 10.1% | 10.1% | 10.1% |', 'score': 0.6786044}]\u001B[0m\n",
      "Thought:\u001B[32;1m\u001B[1;3m```\n",
      "AI: 北京今天（10月1日）的天气情况如下：\n",
      "- 天气：晴转多云\n",
      "- 风速：北风三四级，阵风可达七级\n",
      "- 最高气温：18℃\n",
      "- 最低气温：7℃\n",
      "\n",
      "气象部门提醒，今天白天北风明显，公众外出请注意防风。未来几天，气温略有回升，但早晚天气仍然较凉，最低气温将低于10℃，建议适时添衣以防感冒。\n",
      "```\u001B[0m\n",
      "\n",
      "\u001B[1m> Finished chain.\u001B[0m\n",
      "{'input': '查询北京今天的天气情况', 'chat_history': [HumanMessage(content='查询北京今天的天气情况', additional_kwargs={}, response_metadata={}), AIMessage(content='北京今天（10月1日）的天气情况如下：\\n- 天气：晴转多云\\n- 风速：北风三四级，阵风可达七级\\n- 最高气温：18℃\\n- 最低气温：7℃\\n\\n气象部门提醒，今天白天北风明显，公众外出请注意防风。未来几天，气温略有回升，但早晚天气仍然较凉，最低气温将低于10℃，建议适时添衣以防感冒。\\n```', additional_kwargs={}, response_metadata={})], 'output': '北京今天（10月1日）的天气情况如下：\\n- 天气：晴转多云\\n- 风速：北风三四级，阵风可达七级\\n- 最高气温：18℃\\n- 最低气温：7℃\\n\\n气象部门提醒，今天白天北风明显，公众外出请注意防风。未来几天，气温略有回升，但早晚天气仍然较凉，最低气温将低于10℃，建议适时添衣以防感冒。\\n```'}\n"
     ]
    }
   ],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-01T03:21:01.115198Z",
     "start_time": "2025-10-01T03:20:53.955998Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "result = agent_executor.invoke(\"上海呢？\")\n",
    "# 处理响应数据\n",
    "print(result)"
   ],
   "id": "b735753db4d7ebe6",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n",
      "\u001B[32;1m\u001B[1;3m```\n",
      "Thought: Do I need to use a tool? Yes\n",
      "Action: Search\n",
      "Action Input: 上海今天的天气情况\n",
      "```\u001B[0m\n",
      "Observation: \u001B[36;1m\u001B[1;3m[{'title': '中国气象局-天气预报-城市预报- 上海', 'url': 'https://weather.cma.cn/web/weather/58367.html', 'content': '| 湿度 | 62.3% | 64% | 74.1% | 78% | 82.3% | 84% | 90.9% | 82.7% |\\n| 云量 | 70% | 70% | 70% | 70% | 10.1% | 10.1% | 10.1% | 10.1% | [...] | 湿度 | 82.7% | 68.8% | 71.2% | 74% | 82.8% | 88.6% | 93.2% | 90.8% |\\n| 云量 | 10.1% | 4.8% | 4.6% | 65% | 70% | 70% | 70% | 65% | [...] |  |  |  |  |  |  |  |  |  |\\n ---  ---  ---  --- \\n| 时间 | 11:00 | 14:00 | 17:00 | 20:00 | 23:00 | 02:00 | 05:00 | 08:00 |\\n| 天气 |\\n| 气温 | 34℃ | 34.3℃ | 32℃ | 28.6℃ | 28.1℃ | 27.3℃ | 26.7℃ | 28.6℃ |\\n| 降水 | 2.3mm | 2.3mm | 2.3mm | 2.3mm | 无降水 | 无降水 | 无降水 | 无降水 |\\n| 风速 | 3.3m/s | 3.3m/s | 3m/s | 2.8m/s | 3.2m/s | 3.1m/s | 3m/s | 3.3m/s |\\n| 风向 | 西南风 | 西南风 | 东南风 | 东北风 | 东南风 | 东南风 | 东南风 | 西南风 |\\n| 气压 | 1017.1hPa | 1014.6hPa | 1014.3hPa | 1015.6hPa | 1015hPa | 1014.3hPa | 1013.7hPa | 1014.6hPa |', 'score': 0.7999589}, {'title': '国庆中秋假期天气预报公布！', 'url': 'https://www.shhuangpu.gov.cn/xw/001015/20250928/e1124982-972c-419d-a4de-5cb175e303b7.html', 'content': '— 2025 — 上海天气 国庆中秋假期  \\n          节前降雨降温  \\n          上海今日雨热同在，体感潮湿闷热。徐家汇站最高气温34.6℃，闵行站为全市最高达34.9℃。中午起一些地方出现短时阵雨或雷雨，主要集中在东部、北部和南部地区，以浦东康桥镇46.5毫米为最大（11时至16时45分统计）。预计今天夜间一些地方仍有阵雨或雷雨，下班时段注意交通安全。 今日回顾 节前天气：明后两天本市有一次较明显的降水过程，主要降水时段在29日下午到30日白天，累积雨量20～40毫米，局部地区可达40～60毫米。30日白天降水较为明显，夜间雨止。气温降至30℃以下。 具体预报  \\n          29日：阴到多云有时有阵雨或雷雨，25~30℃，相对湿度95%~60%，偏北风3~4级，沿江沿海地区4~5级，雷雨时阵风7~9级。 30日：阴到多云有时有阵雨，夜里转阴到多云，24~28℃。偏北风4~5级。  \\n          假期上海天气预报', 'score': 0.7286136}, {'title': '预报- 上海', 'url': 'https://www.weather.com.cn/weather/101020100.shtml', 'content': '首页 预报 预警 雷达 云图 天气地图 专业产品 资讯 视频 节气 我的天空\\n\\n更多\\n\\n台风路径 空间天气 图片 专题 环境 旅游 碳中和 气象科普 一带一路 产创平台\\n\\n国内) 本地) 国际)\\n\\n:   北京 上海 成都 杭州 南京 天津 深圳 重庆 西安 广州 青岛 武汉\\n\\n:   故宫 阳朔漓江 龙门石窟 野三坡 颐和园 九寨沟 东方明珠 凤凰古城 秦始皇陵 桃花源\\n\\n高球\\n:   佘山 春城湖畔 华彬庄园 观澜湖 依必朗 旭宝 博鳌 玉龙雪山 番禺南沙 东方明珠\\n\\n<<返回 全国\\n\\n河北下辖区域\\n\\n热门城市\\n\\n:   曼谷 东京 首尔 吉隆坡 新加坡 巴黎 罗马 伦敦 雅典 柏林 纽约 温哥华 墨西哥城 哈瓦那 圣何塞 巴西利亚 布宜诺斯艾利斯 圣地亚哥 利马 基多 悉尼 墨尔本 惠灵顿 奥克兰 苏瓦 开罗 内罗毕 开普敦 维多利亚 拉巴特\\n\\n:   亚洲 欧洲 北美洲 南美洲 非洲 大洋洲\\n\\n全国> 上海 > 城区\\n\\n 今天\\n 7天\\n 8-15天\\n 40天\\n 雷达图\\n\\n # 30日（今天）\\n\\n  小雨转阴\\n\\n  27/22℃\\n\\n  <3级\\n # 1日（明天）\\n\\n  阴 [...] /\\n\\n  27/22°C\\n 上海博物馆\\n\\n  /\\n\\n  27/22°C\\n\\n# 高清图集\\n\\n辽宁锦州今天早晨现大雾天气 能见度不佳 紫菀花开 一抹紫色惊艳秋光 河南汝州雨水连成线 路面湿滑影响出行 秋分日北京上空现日晕景观 从传统到创新 中秋节共赏“饼”纷时刻\\n\\n# 重大天气事件\\n\\n 9月30日\\n\\n  ## 国庆中秋假期华西至黄淮降雨频繁 南方多地秋老虎卷土重来\\n\\n  今天（9月30日），随着“博罗依”减弱消散，广西、云南等地雨势减弱，但局地仍有【暴雨】。国庆中秋假期首日，我国降雨将再度发展。\\n 9月29日\\n\\n  ## 广西云南等地仍有台风雨 华西地区秋雨持续发力\\n\\n  受台风“博罗依”及其残余环流影响，广西、云南等地今天（9月29日）将有强降雨天气。明天，“博罗依”影响逐渐收尾。同时，华西地区降雨连连。\\n 9月28日\\n\\n  ## 台风“博罗依”靠近华南进入核心影响时段 南方多地或现高温\\n\\n  今天（9月28日），台风“博罗依”将掠过海南南部海面，受其影响，华南沿海风雨增强，部分地区有大暴雨，局地特大暴雨，需做好防台风措施。\\n 9月27日', 'score': 0.6884899}]\u001B[0m\n",
      "Thought:\u001B[32;1m\u001B[1;3m```\n",
      "Thought: Do I need to use a tool? No\n",
      "AI: 上海今天（10月1日）的天气情况如下：\\n- 天气：小雨转阴\\n- 风速：风速较小，约3级\\n- 最高气温：27℃\\n- 最低气温：22℃\\n\\n预计今天会有小雨，气温相对较高，但湿度较大，外出时请注意防雨和保持干燥。\n",
      "```\u001B[0m\n",
      "\n",
      "\u001B[1m> Finished chain.\u001B[0m\n",
      "{'input': '上海呢？', 'chat_history': [HumanMessage(content='查询北京今天的天气情况', additional_kwargs={}, response_metadata={}), AIMessage(content='北京今天（10月1日）的天气情况如下：\\n- 天气：晴转多云\\n- 风速：北风三四级，阵风可达七级\\n- 最高气温：18℃\\n- 最低气温：7℃\\n\\n气象部门提醒，今天白天北风明显，公众外出请注意防风。未来几天，气温略有回升，但早晚天气仍然较凉，最低气温将低于10℃，建议适时添衣以防感冒。\\n```', additional_kwargs={}, response_metadata={}), HumanMessage(content='上海呢？', additional_kwargs={}, response_metadata={}), AIMessage(content='上海今天（10月1日）的天气情况如下：\\\\n- 天气：小雨转阴\\\\n- 风速：风速较小，约3级\\\\n- 最高气温：27℃\\\\n- 最低气温：22℃\\\\n\\\\n预计今天会有小雨，气温相对较高，但湿度较大，外出时请注意防雨和保持干燥。\\n```', additional_kwargs={}, response_metadata={})], 'output': '上海今天（10月1日）的天气情况如下：\\\\n- 天气：小雨转阴\\\\n- 风速：风速较小，约3级\\\\n- 最高气温：27℃\\\\n- 最低气温：22℃\\\\n\\\\n预计今天会有小雨，气温相对较高，但湿度较大，外出时请注意防雨和保持干燥。\\n```'}\n"
     ]
    }
   ],
   "execution_count": 2
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
